<?php
// http://discuz.demo/plugin.php?id=插件唯一标识:plugin_route
if(!defined('IN_DISCUZ')) exit('Access Denied');
echo '插件文件已加载<br>';
var_dump($_GET);

class plugin_erling_kami  {
    public function common() {
        // 1. 加载路由配置
        echo 'common方法已执行<br>';
        $routes = include dirname(__FILE__).'/routes.php';
        
        // 2. 获取当前请求信息
        $method = $_SERVER['REQUEST_METHOD'];
        $path = trim($_GET['route'] ?? '', '/'); // 通过?route=user/profile访问
        
        // 3. 路由匹配
        foreach($routes as $route => $action) {
            list($routeMethod, $routePath) = explode(' ', $route, 2);
            
            // 匹配方法类型
            if(strtoupper($routeMethod) !== $method) continue;
            
            // 将路由转换为正则
            $pattern = '@^' . preg_replace('/\{(\w+)\}/', '(?P<$1>[^/]+)', $routePath) . '$@';
            
            // 路径匹配
            if(preg_match($pattern, $path, $matches)) {
                // 4. 解析控制器
                list($controller, $method) = explode('@', $action);
                echo '路由匹配成功<br>';
                echo '控制器: '.$controller.'<br>';
                echo '方法: '.$method.'<br>';
                echo '参数: '.json_encode($matches).'<br>';
                
                // 5. 加载控制器文件
                $controllerFile = dirname(__FILE__).'/controller/'.$controller.'.php';
                

                if(file_exists($controllerFile)) {
                    echo '控制器文件路径: '.$controllerFile.'<br>';
                    // exit;
                    require_once $controllerFile;//Oops! System file lost: class/plugin\erling/kami\controller/controller_basecontroller.php
                    echo '控制器文件已加载<br>';
                    // 6. 实例化并调用方法
                    $controllerInstance = new $controller();
                    $params = array_filter($matches, 'is_string', ARRAY_FILTER_USE_KEY);
                    call_user_func_array([$controllerInstance, $method], $params);
                    exit; // 终止后续处理
                }
            }
        }
        
        // 无匹配路由
        $acceptHeader = $_SERVER['HTTP_ACCEPT'] ?? '';
        if (strpos($acceptHeader, 'application/json')!== false) {
            // 返回 JSON 响应
            header('Content-Type: application/json');
            echo json_encode([
                'code' => 404,
                'message' => 'not found'
            ]);
            exit;
        } else {
            // 原有的 showmessage 处理
            showmessage('not found');
        }
    }
}

if (isset($_GET['id']) && $_GET['id'] === 'erling_kami:plugin_route') {
    $plugin = new plugin_erling_kami();
    $plugin->common();
}